package library.admin.service;

import library.admin.domain.dto.PageDTO;
import library.admin.domain.po.User;
import library.admin.domain.query.UserPageQuery;
import library.admin.domain.request.SaveUserRequest;
import library.admin.domain.request.UpdateUserStatusRequest;
import library.admin.domain.vo.UserVO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 用户服务接口
 */
public interface IUsersService extends IService<User> {

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户对象
     */
    User getByUsername(String username);

    /**
     * 用户登录
     *
     * @param username 用户名
     * @param password 密码
     */
    void login(String username, String password);
    
    /**
     * 分页查询用户列表
     *
     * @param pageQuery 分页查询参数
     * @return 用户分页结果
     */
    PageDTO<UserVO> queryUsersByPage(UserPageQuery pageQuery);
    
    /**
     * 添加新用户
     *
     * @param request 添加用户请求
     * @return 新用户ID
     */
    Long saveUser(SaveUserRequest request);
    
    /**
     * 更新用户状态（启用/禁用）
     *
     * @param request 更新状态请求
     * @return 是否成功
     */
    boolean updateUserStatus(UpdateUserStatusRequest request);
    
    /**
     * 检查用户名是否已存在
     *
     * @param username 用户名
     * @return 是否存在
     */
    boolean existsByUsername(String username);
    
    /**
     * 检查电子邮箱是否已存在
     *
     * @param email 电子邮箱
     * @return 是否存在
     */
    boolean existsByEmail(String email);
    
    /**
     * 获取用户详情
     *
     * @param id 用户ID
     * @return 用户视图对象
     */
    UserVO getUserDetails(Long id);
}
